使用细节层次 (Level of Detail) 节点
如果想根据 细节层次 (Level of Detail) 节点的查看距离,显示相同/不同节点的不同外观时,您可以使用 细节层次 (Level of Detail) 节点。细节层次 (Level of Detail) 节点的每个子节点用于设置一个单个的外观和(当外观被选中和显示时)约束。约束可以是:
- 到 预览 (Preview) 摄像机 (Camera) 节点的最短距离。您可以设置最短距离 (Minimum Distance) 属性的值,以设置约束。较小的值会设置一个子节点,当 预览 (Preview) 摄像机 (Camera) 节点靠近该节点时会将其选中。较大的值会设置一个子节点,当 预览 (Preview) 摄像机 (Camera) 节点远离该节点时会将其选中。Kanzi 会显示其距离值仅次于 细节层次 (Level of Detail) 节点与 预览 (Preview) 摄像机 (Camera) 节点之间的距离,距离值第二大的那个子节点。
- 屏幕的最小覆盖面积。您可以设置最小面积 (Minimum Area) 属性的值,以设置约束。屏幕的覆盖范围是在 [0...1] 范围内测量的,其中,0 代表对象根本不覆盖屏幕,1 代表节点完全覆盖整个屏幕。Kanzi 会显示 面积值仅小于 细节层次 (Level of Detail) 边界框到屏幕的投影面积的子节点。
细节层次 (Level of Detail) 节点只会影响渲染,因此您无法在布局中使用这些节点。细节层次 (Level of Detail) 节点的大小是其最大子节点的大小,即使该子节点不可见。
注
您只有在其 场景 (Scene) 节点使用 旧渲染通道(已停用)(Legacy Render Pass, deprecated) 渲染 场景 (Scene) 节点的内容时,才能使用 细节层次 (Level of Detail) 节点。
使用 细节层次 (Level of Detail) 节点
要使用 细节层次 (Level of Detail) 节点,请执行以下操作:
- 设置 场景 (Scene) 节点渲染一个 细节层次 (Level of Detail) 节点:
- 在 素材库 (Library) 按下 Alt 并右键点击 渲染 (Rendering) 中,选择 旧渲染通道(已停用)(Legacy Render Pass, deprecated),并在 属性 (Properties) 中设置其属性以获取所需的渲染结果。
- 在 工程 (Project) 选择要创建 细节层次 (Level of Detail) 节点的 场景 (Scene) 节点,并在 属性 (Properties) 中将 渲染通道 (Render Pass) 属性设置为您创建的 旧渲染通道(已停用)(Legacy Render Pass, deprecated)。
- 在 工程 (Project) 按下 Alt 并右键点击 您设置的 场景 (Scene) 节点中,选择 细节层次 (Level of Detail)。
请注意,您只能在 3D 节点中创建 细节层次 (Level of Detail) 节点。
- 在属性 (Properties) 中将 类型 (Type) 属性设置为:
- 距离 (Distance) 创建一个 细节层次 (Level of Detail) 节点,根据 细节层次 (Level of Detail) 节点和预览摄像机之间的距离,显示其子节点。
- 透视 (Perspective) 创建一个 细节层次 (Level of Detail) 节点,显示其面积值仅小于 细节层次 (Level of Detail) 节点边界框到屏幕的投影面积的子节点。
例如,设置类型 (Type) 为 距离 (Distance)。
- 在工程 (Project) 中,为 细节层次 (Level of Detail) 节点添加子节点。
例如,添加一个球体 (Sphere)、一个方框 (Box) 和一个平面 (Plane) 节点。
对于您为 细节层次 (Level of Detail) 节点添加的每个节点,根据您选择的 细节层次 (Level of Detail) 节点的类型,Kanzi Studio 会添加 最短距离 (Minimum Distance) 或 最小面积 (Minimum Area) 属性。
- 选择您为 细节层次 (Level of Detail) 节点添加的每个节点,并在 属性 (Properties) 中,根据 细节层次 (Level of Detail) 节点的类型,设置 最短距离 (Minimum Distance) 或 最小面积 (Minimum Area) 属性值,以定义 细节层次 (Level of Detail) 节点何时显示每一项。
例如,如果将 类型 (Type) 设置为距离 (Distance),请在 工程 (Project) 中选择:- 球体 (Sphere) 并将其 最短距离 (Minimum Distance) 属性设置为 0。
- 方框 (Box) 并将其 最短距离 (Minimum Distance) 属性设置为 10。
- 平面 (Plane) 并将其 最短距离 (Minimum Distance) 属性设置为 20。
当沿 Z 轴移动 细节层次 (Level of Detail) 节点或预览摄像机时,Kanzi 会显示其距离值仅次于 细节层次 (Level of Detail) 节点与预览摄像机之间距离的那个子节点。
在 API 中使用 细节层次 (Level of Detail) 节点
要创建具有三个细节层次的距离细节层次选择器节点:
//创建一个名为 LOD 选择器的细节层次选择器节点。
LevelOfDetail3DSharedPtr lodSelector = LevelOfDetail3D::create(domain, "LOD selector");
//添加 3 个细节层次,每个层次一个子对象。
lodSelector->addChild(lodHigh);
lodSelector->addChild(lodMedium);
lodSelector->addChild(lodLow);
//设置细节层次选择器节点,以便基于细节层次选择器节点
//与预览摄像机之间的距离显示细节层次选择器节点的子对象。
lodSelector->setType(LevelOfDetail3D::LodTypeDistance);
//当与预览摄像机至少相距 10.0f 时,
//请使用低层次的距离子对象 (lodLow)。
LevelOfDetail3D::setMinimumDistance(*lodLow, 10.0f);
//当与预览摄像机至少相距 5.0f 但不到 10.0f 时,
//请使用中等层次的距离子对象 (lodMedium)。
LevelOfDetail3D::setMinimumDistance(*lodMedium, 5.0f);
//当与预览摄像机相距不到 5.0f 时,
//请使用高层次的距离子对象 (lodHigh)。
LevelOfDetail3D::setMinimumDistance(*lodHigh, 0.0f);
有关详细信息,请参阅 API reference 中的 LevelOfDetail3D
类。
细节层次 (Level of Detail) 属性类型和消息
要查看 细节层次 (Level of Detail) 节点可用属性类型和消息的完整列表,请参阅 Level of detail。
另请参阅
使用空节点 (Empty Node) 节点
打开导航